【解決した】UnityのWWWで、ファイル送付時にヘッダー情報付加不可みたいな話


概要

WWWで、サクっとファイルアップロードするサンプルを書こうとして詰まったのでメモまでに。


そもUnityでWWWを使うのが悪手なんだけど、WWWForm.AddBinaryData(…) みたいなのを見かけて、

ああー簡単に書けるんだろうなーきっと、って思ったんだけど、そうでも無かったんだぜばなし。

↑2014/01/30 1:12:48 書き方変えたらちゃんと動いた。 一体何に嵌っていたんだ俺は、、、

参考:

Unityでtwitterに投稿する方法(API1.1)

http://zi-su.blogspot.jp/2014/01/unitytwitterapi11.html



実装

下記はOK.


var data = 何かbyte[]なデータ;

var name = "something.type";

var dataType = "application/type";


WWWForm form = new WWWForm();

form.AddBinaryData(name, data, name, dataType);

var www = new WWW(url, form);

はー簡単っすねえ。

通信も簡単に成功する。 multipart postが走る。



で、じゃあheaderに細工しようー、と思ったんだ、


headerに key:value みたいなのを入れてみようぜーって。

var data = 何かbyte[]なデータ;


WWWForm form = new WWWForm();

form.AddBinaryData(name, data, name, dataType);

var www = new WWW(url, attachData, headers);// こういうのがあれば良いよね


ところが、attachDataを受け入れるスロットが、WWWのコンストラクタには無い。

WWW(url, data, headers) っていうのはあるけど、dataはbodyの中身になるものだ。


っつーことは、WWWForm.AddBinaryData 以外に、ファイルアタッチを行う手段は無いのか!?


→ドキュメント見たけど、無いような気がする

→じゃあ WWWForm.AddBinaryData した後に、formにheaderの情報を足せれば良いんですね!



結果

→じゃあ WWWForm.AddBinaryData した後に、formにheaderの情報を足せれば良いんですね!

そんな方法は無かった。


原因

1.ファイルアタッチを行うルートは、WWW(url, form)しかない。

2.WWWFormの内部のheaderは form.headerでアクセスできるけど、writeは出来ない。


よって、ファイルアタッチの時、WWWクラスを使う以上は、headerに何かの情報を足す事が出来ない。


、、、なーーんか前、WWWでOAuthとかを通れるようにしたとき、似たような目にあったような気がして、

そのときはブレイクスルーがあったような気がするんだけど、、、



form.headers に書き込みできないのツラい。



誰か助けて!! @toru_inoue